import java.util.*;

/**
 * @author LKQ
 * @date 2022/4/17 15:57
 * @description map + 求余优化
 */
public class Solution2 {
    public static void main(String[] args) {

    }
    public int minimumRounds(int[] tasks) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int v: tasks) {
            map.put(v, map.getOrDefault(v, 0) + 1);
        }
        int ans = 0;
        for (Map.Entry<Integer, Integer> entry: map.entrySet()) {
            int num = entry.getValue();
            if (num == 1) {
                return -1;
            }
            if (num % 3 == 0) {
                // 能够每一轮完成3个
                ans += num / 3;
            }else {
                if (num % 3 == 2) {
                    // 那么需要先分出去一个2，然后才能整除，因此至少需要
                    ans += (num + 2) / 3;
                }else {
                    // 需要先分两个2出去，然后才能整除
                    ans += (num - 4) / 3 + 2;
                }
            }
        }
        return ans;
    }
}
